#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
快速启动脚本：用于管理和启动定时调度任务

兼容系统：Windows / Linux / macOS
"""

import subprocess
import sys
import os
from pathlib import Path

def install_dependencies():
    """安装必要的依赖包（跨平台兼容）"""
    print("检查并安装依赖包...")
    packages = ['schedule', 'pandas', 'numpy']
    
    for package in packages:
        try:
            __import__(package)
            print(f"  ✓ {package} 已安装")
        except ImportError:
            print(f"  ⏳ 安装 {package}...")
            try:
                # 跨平台兼容的pip调用
                if sys.platform == 'win32':
                    subprocess.run([sys.executable, '-m', 'pip', 'install', package], 
                                 check=True, capture_output=True, encoding='utf-8', errors='replace')
                else:
                    subprocess.run([sys.executable, '-m', 'pip', 'install', package], 
                                 check=True, encoding='utf-8', errors='replace')
                print(f"  ✓ {package} 安装完成")
            except subprocess.CalledProcessError:
                print(f"  ❌ {package} 安装失败，你可以手动执行: pip install {package}")


def show_menu():
    """显示菜单"""
    print("\n" + "=" * 60)
    print("【TDX每日定时调度任务管理】")
    print("=" * 60)
    print("1. 启动调度器（每天下午4点自动执行）")
    print("2. 执行一次测试（立即执行一遍完整流程）")
    print("3. 显示日志")
    print("4. 查看帮助")
    print("5. 安装依赖")
    print("0. 退出")
    print("=" * 60)


def run_scheduler():
    """启动调度器（跨平台兼容）"""
    script_path = Path(__file__).parent / 'scheduler_daily_tasks.py'
    print(f"\n启动调度器: {script_path}")
    print("调度器将在后台运行，每天下午4点执行任务")
    print("按 Ctrl+C 可停止调度器\n")
    
    try:
        if sys.platform == 'win32':
            # Windows上需要专颗处理子进程
            subprocess.run([sys.executable, str(script_path), '--mode', 'start'],
                         cwd=str(Path(__file__).parent))
        else:
            subprocess.run([sys.executable, str(script_path), '--mode', 'start'])
    except KeyboardInterrupt:
        print("\n调度器已停止")
    except Exception as e:
        print(f"\n❌ 执行错误: {str(e)}")


def run_test():
    """执行测试（跨平台兼容）"""
    script_path = Path(__file__).parent / 'scheduler_daily_tasks.py'
    print(f"\n执行测试: {script_path}")
    print("这将立即执行一遍完整的任务流程\n")
    
    try:
        if sys.platform == 'win32':
            result = subprocess.run([sys.executable, str(script_path), '--mode', 'test'],
                                  cwd=str(Path(__file__).parent))
        else:
            result = subprocess.run([sys.executable, str(script_path), '--mode', 'test'])
        
        if result.returncode == 0:
            print("\n✅ 测试执行成功")
        else:
            print("\n❌ 测试执行失败")
    except Exception as e:
        print(f"\n❌ 执行错误: {str(e)}")


def show_log():
    """显示日志"""
    log_file = Path(__file__).parent / 'scheduler.log'
    
    if not log_file.exists():
        print("\n还没有日志文件")
        return
    
    print(f"\n【日志文件: {log_file}】")
    print("-" * 60)
    
    with open(log_file, 'r', encoding='utf-8') as f:
        lines = f.readlines()
        # 显示最后50行
        for line in lines[-50:]:
            print(line.rstrip())
    
    print("-" * 60)


def show_help():
    """显示帮助信息"""
    help_text = """
【系统说明】
本系统用于自动执行TDX板块数据处理的完整流程，每天下午4点自动执行一次。

【执行流程】
1. tdx_control.py     - 从通达信导出板块数据
2. archive_txt_files.py - 备份txt文件到日期目录
3. generate_blocks.py   - 生成和过滤板块数据
4. rgg_ana_lite.py      - 生成RRG分析图表

【使用方式】

方式1：启动调度器
  python3 scheduler_quick_start.py
  选择菜单 1，调度器将在后台运行

方式2：命令行启动
  # 启动调度器
  python3 scheduler_daily_tasks.py --mode start
  
  # 执行一次测试
  python3 scheduler_daily_tasks.py --mode test

方式3：系统定时任务（Linux/Mac）
  在crontab中添加：
  0 16 * * * /usr/bin/python3 /path/to/scheduler_daily_tasks.py --mode start

【日志文件】
所有执行日志保存在: scheduler.log

【注意事项】
- 调度器需要持续运行，建议在服务器或一直开机的设备上运行
- 如果tdx_control.py执行失败，会继续执行后续步骤
- 如果generate_blocks.py失败，会停止后续执行
- 所有脚本都必须在同一目录下

【故障排查】
1. 检查依赖包是否安装: pip list | grep schedule
2. 查看日志了解具体错误: tail -f scheduler.log
3. 执行测试模式验证: python3 scheduler_daily_tasks.py --mode test
"""
    print(help_text)


def main():
    """主菜单循环（跨平台兼容）"""
    # Windows下确保正常作业目录
    if sys.platform == 'win32':
        os.chdir(os.path.dirname(os.path.abspath(__file__)) or '.')
    
    print(f"欢迎使用TDX定时调度任务管理系统 (运行平台: {sys.platform})\n")
    
    while True:
        show_menu()
        choice = input("请选择操作 (0-5): ").strip()
        
        if choice == '1':
            run_scheduler()
        elif choice == '2':
            run_test()
        elif choice == '3':
            show_log()
        elif choice == '4':
            show_help()
        elif choice == '5':
            install_dependencies()
        elif choice == '0':
            print("再见！")
            break
        else:
            print("❌ 无效选择，请重新输入")


if __name__ == '__main__':
    main()
